import { ref } from 'vue'
import PageModel from '@/components/PageModel/PageModel.vue'
import { IForm } from '@/base-ui/Form/types'
import { pageModelConfig } from '@/views/main/system/menu/pageModelConfig'
import { menuTypeChange } from '@/utils/menuTypeChange'

type CallbackFn = (item?: any) => void

export function usePageModel(
  newCb?: CallbackFn,
  editCb?: CallbackFn,
  config?: IForm,
  pageName?: string
) {
  const pageModelRef = ref<InstanceType<typeof PageModel>>()
  const defaultInfo = ref({})
  const creatOrEdit = ref('')
  const newBtnClick = () => {
    creatOrEdit.value = '新建'
    defaultInfo.value = {}
    if (pageModelRef.value) {
      pageModelRef.value.dialogVisible = true
    }
    if (pageName === 'menu') {
      for (const i of pageModelConfig.formItems) {
        if (
          i.field === 'icon' ||
          i.field === 'url' ||
          i.field === 'permission' ||
          i.field === 'parentId'
        ) {
          i.isHidden = true
        }
      }
    }
    newCb && newCb()
  }
  const editBtnClick = async (info: any) => {
    creatOrEdit.value = '编辑'
    const obj: any = {}
    if (pageName === 'menu') {
      let title = ''
      switch (info.type) {
        case 1:
          title = '一级菜单'
          break
        case 2:
          title = '二级菜单'
          break
        case 3:
          title = '三级菜单'
          break
      }
      for (const item of pageModelConfig!.formItems) {
        if (item.field === 'parentId') {
          // debugger
          item.options = await menuTypeChange(title, pageModelConfig)
          console.log(item.options)
        }
      }
    }
    if (config) {
      // debugger
      for (const item of config.formItems) {
        if (item.options) {
          for (const i of item.options) {
            if (info[item.field] === i.value) {
              obj[item.field] = i.title
            }
          }
        }
      }
    }

    defaultInfo.value = { ...info, ...obj }
    if (pageModelRef.value) {
      pageModelRef.value.dialogVisible = true
    }
    editCb && editCb(info)
  }
  return [pageModelRef, defaultInfo, newBtnClick, editBtnClick, creatOrEdit]
}
